package bytes;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;

/**
 * 1、读取一个以 UTF-8 编码存储的文本文件
 * 2、将读取到的字节序列按照 UTF-8 解码 为字符串形式
 * 3、将 字符串 用 GBK 重新 编码为字节序列
 * 4、将重新编码后的字节序列输出到一个新的文件中
 */
public class OutputStreamTest2 {

	public static void main(String[] args) throws IOException {
		
		final Charset utf8 = Charset.forName( "UTF-8" );
		final Charset gbk = Charset.forName( "GBK" );
		
		// src 所表示的文件是以 UTF-8 编码保存的文本文件
		File src = new File( "src/bytes/OutputStreamTest2.java" );
		String name = src.getName();
		File dest = new File( "GBK-" +name  );
		
		if( src.exists() && src.isFile() ) {
			// 获取文件体积并强转为int类型数值
			int size = (int)src.length(); 
			// 创建一个可以容纳 src 所表示文件中全部 字节 的数组 (针对小文件是可以的)
			final byte[] buffer = new byte[ size ];
			
			InputStream in = new FileInputStream( src );
			/* --- 1、读取一个以 UTF-8 编码存储的文本文件 --- */
			in.read( buffer ); // 将 src 所表示的文件中的内容一次性读取到 buffer 数组中
			in.close();
			
			/* --- 2、将读取到的字节序列按照 UTF-8 解码 为字符串形式 --- */
			String s = new String( buffer , utf8 ) ; // 使用指定编码将字节序列解码为字符串
			// System.out.println( s );
			
			/* --- 3、将 字符串 用 GBK 重新 编码为字节序列 --- */
			final byte[] bytes = s.getBytes( gbk ) ;
			
			OutputStream out = new FileOutputStream( dest );
			/* --- 4、将重新编码后的字节序列输出到一个新的文件中 --- */
			out.write( bytes );
			out.close();
			
		}
		

	}

}
